object ej6 {
	def boom(x: Int) : Int = {
		if (x==0) throw new Exception("boom")
		else boom(x-1) + 1   // No es recursiva a la cola
	}

	def bang(x: Int) : Int =
		if (x==0) throw new Exception("bang")
		else bang(x-1)  // Es recursiva a la cola.
		

    // Funciones mutuamente recursivas, no son optimizadas por el compilador.
	def boom2(x: Int) : Int = {
		if (x==0) throw new Exception("boom2")
		else bang2(x-1)
	}

	def bang2(x: Int) : Int =
		if (x==0) throw new Exception("bang2")
		else boom2(x-1)

	def main(args:Array[String]) = {
		//boom(3)	
		//bang(3)
		boom2(3)
	}

}
